﻿#ifndef __FITKSPLITMESH_H__
#define __FITKSPLITMESH_H__
#include "FITK2DMeshToolsAPI.h"
#include "FITKAbstractSimplifyMesh.h"
#include <OpenVolumeMesh/Mesh/PolyhedralMesh.hh>

namespace Core
{
    class FITKNode;
    class FITKPoint;
}

namespace Interface
{
    class FITKElementTri3;
}

namespace Interface
{
    class FITK2DMeshToolsAPI FITKSplitMesh : public FITKAbstractSimplifyMesh
    {
    public:
        FITKSplitMesh();
        ~FITKSplitMesh();

    public:
        /**
         * @brief    
         * @return   QList<FITKSimplifyMeshPoint>
         * @author   zhangjingxuan(hiter25@outlook.com)
         * @date     2025-03-11
         */
        QList<FITKSimplifyMeshPoint> getGeoPoint() override;
        /**
         * @brief    
         * @return   QList<FITKSimplifyMeshEdge>
         * @author   zhangjingxuan(hiter25@outlook.com)
         * @date     2025-03-11
         */
        QList<FITKSimplifyMeshEdge> getGeoEdge() override;
        /**
         * @brief    
         * @return   QList<FITKSimplifyMeshFace>
         * @author   zhangjingxuan(hiter25@outlook.com)
         * @date     2025-03-11
         */
        QList<FITKSimplifyMeshFace> getGeoFace() override;
        /**
         * @brief    
         * @param[i] meshPoints 
         * @param[i] meshFaces 
         * @return   bool
         * @author   zhangjingxuan(hiter25@outlook.com)
         * @date     2025-03-11
         */
        bool initPlateMesh(const QList<Core::FITKNode*>& meshPoints, const QList<Interface::FITKElementTri3*>& meshFaces) override;
    private:
        /**
         * @brief  OpenVolumeMesh网格对象
         * @author zhangjingxuan(hiter25@outlook.com)
         * @date   2025-03-11
         */
        OpenVolumeMesh::GeometricPolyhedralMeshV3d* m_mesh{ nullptr };
    };
}

#endif // !__FITKSPLITMESH_H__
